package com.edu.dk.security.impl;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

import com.edu.dk.security.HeaderCommitter;

import java.io.IOException;
import java.io.PrintWriter;

/**
 * 当开始写http content的时候，通知其它request context提交其headers。在此之后将不能修改headers。
 *
 */
class CommittingAwareResponse extends HttpServletResponseWrapper {
	private final HeaderCommitter committer;
	private ServletOutputStream stream;
	private PrintWriter writer;

	public CommittingAwareResponse(HttpServletResponse response, HeaderCommitter committer) {
		super(response);
		this.committer = committer;
	}

	public ServletOutputStream getOutputStream() throws IOException {
		if (stream == null) {
			stream = new CommittingAwareServletOutputStream(committer, super.getOutputStream());
		}

		return stream;
	}

	public PrintWriter getWriter() throws IOException {
		if (writer == null) {
			writer = new CommittingAwarePrintWriter(committer, super.getWriter());
		}

		return writer;
	}

	public String toString() {
		return getResponse().toString();
	}
}
